package com.itwhy.domain.po;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
import com.itwhy.enums.UserStatus;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.time.LocalDateTime;

/**
 * 如果实体类的类名与数据库表名不一致 使用@TableName("表名")
 * 如果实体类的主键与表的主键名不一致 使用@TableId(value = "主键名", type = IdType.AUTO)
 * type表示主键的算法 默认是雪花算法
 * 如果实体类的普通属性名与数据库表名不一致 使用@TableField("对应属性名")
 * 如果实体类的普通属性名以“is”开头, 且是boolean值的, 和上述情况一样
 * 如果实体类的普通属性名与数据库的关键字重复，则用@TableField("`对应属性名`")
 * 如果实体类的普通属性不在数据库表中，则用@TableField(exits = false)
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
@TableName(value = "user", autoResultMap = true) // 开启自动结果集映射
public class User {
    @TableId(value = "id", type = IdType.AUTO) // 自增长 不指定Type默认是雪花算法
    private Long id; // 用户ID
    @TableField("username")
    private String username; // 用户名
    private String password; // 密码
    private String phone; // 手机号
    @TableField(typeHandler = JacksonTypeHandler.class)
    private UserInfo info; // 基本信息
    private UserStatus status; // 状态
    private Integer balance; // 资金
    private LocalDateTime createTime; // 创建时间
    private LocalDateTime updateTime; // 修改时间
}
